home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / stdio / RCS / tmpnam.c,v < prev    next >
Text File  |  1991-12-02  |  2KB  |  126 lines

  1. head     1.1;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.1.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.1
  10. date     89.10.03.17.24.22;  author shirriff;  state Exp;
  11. branches 1.1.1.1;
  12. next     ;
  13.  
  14. 1.1.1.1
  15. date     91.12.02.20.04.09;  author kupfer;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19.  
  20. desc
  21. @initial revision
  22. @
  23.  
  24.  
  25.  
  26. 1.1
  27. log
  28. @Initial revision
  29. @
  30. text
  31. @/*
  32.  * Copyright (c) 1988 Regents of the University of California.
  33.  * All rights reserved.
  34.  *
  35.  * Redistribution and use in source and binary forms are permitted
  36.  * provided that this notice is preserved and that due credit is given
  37.  * to the University of California at Berkeley. The name of the University
  38.  * may not be used to endorse or promote products derived from this
  39.  * software without specific written prior permission. This software
  40.  * is provided ``as is'' without express or implied warranty.
  41.  */
  42.  
  43. #if defined(LIBC_SCCS) && !defined(lint)
  44. static char sccsid[] = "@@(#)tmpnam.c    4.4 (Berkeley) 6/8/88";
  45. #endif /* LIBC_SCCS and not lint */
  46.  
  47. #include <sys/param.h>
  48. #include <sys/stat.h>
  49. #include <sys/file.h>
  50. #include <stdio.h>
  51.  
  52. #define    P_tmpdir    "/usr/tmp"
  53.  
  54. FILE *
  55. tmpfile()
  56. {
  57.     FILE *fp;
  58.     char *f, name[MAXPATHLEN], *tmpnam();
  59.  
  60.     if (!(fp = fopen(f = tmpnam(name), "w+"))) {
  61.         fprintf(stderr, "tmpfile: cannot open %s.\n", name);
  62.         return(NULL);
  63.     }
  64.     (void)unlink(f);
  65.     return(fp);
  66. }
  67.  
  68. char *
  69. tmpnam(s)
  70.     char *s;
  71. {
  72.     static char name[MAXPATHLEN];
  73.     char *mktemp();
  74.  
  75.     if (!s)
  76.         s = name;
  77.     (void)sprintf(s, "%s/XXXXXX", P_tmpdir);
  78.     return(mktemp(s));
  79. }
  80.  
  81. char *
  82. tempnam(dir, pfx)
  83.     char *dir, *pfx;
  84. {
  85.     struct stat buf;
  86.     char *f, *name, *getenv(), *malloc(), *mktemp(), *strcat(), *strcpy();
  87.  
  88.     if (!(name = malloc((u_int)MAXPATHLEN)))
  89.         return(NULL);
  90.     if ((f = getenv("TMPDIR")) && !stat(f, &buf) &&
  91.         (buf.st_mode&S_IFMT) == S_IFDIR && !access(f, W_OK|X_OK)) {
  92.         (void)strcpy(name, f);
  93.         goto done;
  94.     }
  95.     if (dir && !stat(dir, &buf) &&
  96.         (buf.st_mode&S_IFMT) == S_IFDIR && !access(dir, W_OK|X_OK)) {
  97.         (void)strcpy(name, dir);
  98.         goto done;
  99.     }
  100.     if (!stat(P_tmpdir, &buf) &&
  101.         (buf.st_mode&S_IFMT) == S_IFDIR && !access(P_tmpdir, W_OK|X_OK)) {
  102.         (void)strcpy(name, P_tmpdir);
  103.         goto done;
  104.     }
  105.     if (!stat("/tmp", &buf) &&
  106.         (buf.st_mode&S_IFMT) == S_IFDIR && !access("/tmp", W_OK|X_OK)) {
  107.         (void)strcpy(name, "/tmp");
  108.         goto done;
  109.     }
  110.     return(NULL);
  111. done:    (void)strcat(name, "/");
  112.     if (pfx)
  113.         (void)strcat(name, pfx);
  114.     (void)strcat(name, "XXXXXX");
  115.     return(mktemp(name));
  116. }
  117. @
  118.  
  119.  
  120. 1.1.1.1
  121. log
  122. @Initial branch for Sprite server.
  123. @
  124. text
  125. @@
  126.